home *** CD-ROM | disk | FTP | other *** search
/ Merciful 5 / Merciful - Disc 5.iso / software / p / pcqpascalv1.2d.lha / Examples2 / A.Neumann`s / ShowDevs.P < prev   
Encoding:
Text File  |  1997-05-06  |  3.3 KB  |  116 lines

  1. PROGRAM ShowDevices (input , output);
  2.  
  3. {
  4.  
  5.   Programm       : Devices  - listet angemeldet Devices auf
  6.   Sprache        : PCQ-Pascal 1.2b nach einem kleinen Hack von
  7.                    mir in MCC-Pascal V2.04
  8.   Autor          : Andreas Neumann für Purity
  9.   Datum          : 01.03.1992
  10.   
  11. }
  12.  
  13.  
  14. {$I "Include:Exec/Exec.i"};
  15. {$I "Include:Libraries/Dosextens.i"};
  16. {$I "Include:Libraries/Filehandler.i"};
  17. {$I "Include:Utils/DosUtils.I"}
  18. {$I "Include:Utils/StringLib.i"}
  19.  
  20.  
  21. CONST   Device_Types : Array [0..2] OF String = (("DEVICE     "),
  22.                                                  ("DIRECTORY  "),
  23.                                                  ("VOLUME     "));
  24.  
  25. VAR
  26.     mydosbase    : DosLibraryPtr;
  27.     myrootptr    : RootNodePtr;
  28.     myinfoptr    : DosInfoPtr;
  29.     mydeviceptr  : DeviceNodePtr;
  30.     mystr        : String;
  31.     eingabe      : CHAR;
  32.     mystartup    : FileSysStartupMsgPtr;
  33.     myenvec      : DOSEnvecPtr;
  34.     i            : INTEGER;
  35.  
  36. BEGIN
  37.  WRITELN;
  38.  WRITELN ('Device-Lister PD © 1992 by Andreas Neumann (NEUDELSoft) für Purity');
  39.  
  40.  mydosbase:=Address(OpenLibrary (DOSNAME,0));
  41.  
  42.  { Man braucht ja die Adresse der DOSLibrary                      }
  43.  
  44.  myrootptr:=mydosbase^.dl_Root;
  45.  myinfoptr:=BPTRtoAPTR (myrootptr^.rn_Info);
  46.  mydeviceptr:=BPTRtoAPTR (myinfoptr^.di_DevInfo);
  47.  
  48.  { Man hangelt sich von Struktur zu Struktur                      }
  49.  
  50.  WHILE mydeviceptr<>NIL DO
  51.  BEGIN
  52.   WITH mydeviceptr^ DO
  53.   BEGIN
  54.    WRITELN;
  55.  
  56.    mystr:=Address(Integer(BPTRtoAPTR(dn_Name))+1);
  57.  
  58.    { Trick : dn_Name ist ein BSTR. Dies ist ein BPTR auf ein Feld, das }
  59.    {         mit der Anzahl der Stringzeichen beginnt (daher +1) und   }
  60.    {         dann die Zeichen enthält.                                 }
  61.  
  62.    WRITELN ('Name        : ',mystr,':');
  63.    WRITELN ('Type        : ',Device_Types[dn_Type]);
  64.    IF NOT (dn_Lock=Nil) THEN
  65.     WRITELN ('auf diesem Device ist ein Lock')
  66.    ELSE
  67.     WRITELN;
  68.    WRITELN;
  69.  
  70.    mystartup:=BPTRtoAPTR(dn_Startup);
  71.    myenvec:=BPTRtoAPTR(mystartup^.fssm_Environ);
  72.  
  73.    IF (NOT(dn_Startup=Nil)) AND (dn_Type=DLT_DEVICE) AND (myenvec^.de_SizeBlock>0) THEN
  74.    BEGIN
  75.  
  76.     {          es ist ein dateiorientiertes Device !!!             }
  77.     {  im Gegensatz hierzu : ein logisches Device wie L: oder S:   }
  78.  
  79.     WRITELN ('Weiter Informationen zur Organisation des Devices : ');
  80.     WITH myenvec^ DO
  81.     BEGIN
  82.      WRITELN;
  83.      WRITELN ('Größe eines Sektors: ',de_SizeBlock*4,' Bytes');
  84.      WRITELN ('Sektoren pro Block : ',de_SectorPerBlock);
  85.      WRITELN ('Blocks pro Spur    : ',de_BlocksPerTrack);
  86.      WRITELN ('Startzylinder      : ',de_LowCyl);
  87.      WRITELN ('Endzylinder        : ',de_HighCyl);
  88.      WRITELN ('Oberflächen        : ',de_Surfaces);
  89.  
  90.      i:=(de_HighCyl+1-de_LowCyl)*(de_Surfaces)*
  91.          (de_BlocksPerTrack)*(de_SectorPerBlock)*(de_SizeBlock*4);
  92.  
  93.      { Anzahl der Zylinder * Anzahl der Oberflächen * Anzahl der Blöcke
  94.         pro Spur * Anzahl der Sektoren pro Block * Größe eines
  95.         Blockes * 4                                                     }
  96.  
  97.      WRITELN ('Speicherkapazität  : ',i,' Bytes    = ',i DIV 1024,' KBytes');
  98.     END;
  99.     WRITELN;
  100.    END;
  101.   END;
  102.  
  103.   WRITELN ('(W)eiter oder (S)top ?');
  104.   READLN (eingabe);
  105.  
  106.   mydeviceptr:=BPTRtoAPTR(mydeviceptr^.dn_Next);
  107.   IF (toupper(eingabe)='S') THEN mydeviceptr:=NIL;
  108.  END;
  109.  
  110.  WRITELN ('Good Bye. NEUDELSoft wünscht noch viel Spaß mit Amiga und Pascal.');
  111.  Delay (200);
  112.  
  113. END.
  114.  
  115.  
  116.